﻿#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import random
import unittest
import sys
from PyQt4 import QtGui, QtCore, QtWebKit

sys.path.append(r"../src/opt/qonso")

from QonsoExtractorBouygues import QonsoExtractorBouygues
from QonsoModel import QonsoModel

class TestExtractorBouygues(unittest.TestCase):
   def setUp(self):
      pass

   def tearDown(self):
      pass
      
   def test_BouyguesEvasio(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesEvasio.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 11/08/2010 &agrave; 15h59")
      self.assertEqual(model.GetForfait(), 'Evasio')
      
      self.assertEqual(model.GetConsoVoix('str'), "01 min")
      self.assertEqual(model.GetConsoVoix('int'), 1)

      self.assertEqual(model.GetReport('int'), 0)
      self.assertEqual(model.GetReport('str'), "Pas de minutes report&eacute;es ce mois ci")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "1h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 60)

      self.assertEqual(model.GetConsoVoixSupp('str'), "02 min")
      self.assertEqual(model.GetConsoVoixSupp('int'), 2)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "1.12 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 08/09/2010 au soir")
      
   def test_BouyguesEvasio2(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesEvasio2.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 13/08/2010 &agrave; 00h31")
      self.assertEqual(model.GetForfait(), 'Evasio')
      
      self.assertEqual(model.GetConsoVoix('str'), "02 min")
      self.assertEqual(model.GetConsoVoix('int'), 2)

      self.assertEqual(model.GetReport('int'), 0)
      self.assertEqual(model.GetReport('str'), "Pas de minutes report&eacute;es ce mois ci")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "1h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 60)

      self.assertEqual(model.GetConsoVoixSupp('str'), "02 min")
      self.assertEqual(model.GetConsoVoixSupp('int'), 2)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 08/09/2010 au soir")
      
   def test_BouyguesNeo3(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesNeo3.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 03/08/2010 &agrave; 09h43")
      self.assertEqual(model.GetForfait(), 'Neo.3 illimité de 21h30 à 8h')
      
      self.assertEqual(model.GetConsoVoix('str'), "1h02 min")
      self.assertEqual(model.GetConsoVoix('int'), 62)

      self.assertEqual(model.GetReport('int'), 105)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 1h45 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "3h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 180)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 19/08/2010 au soir")
        
   def test_BouyguesNeo20h(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesNeo20hSMS.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 12/08/2010 &agrave; 00h28")
      self.assertEqual(model.GetForfait(), 'Neo 20h')
      
      self.assertEqual(model.GetConsoVoix('str'), "58 min")
      self.assertEqual(model.GetConsoVoix('int'), 58)

      self.assertEqual(model.GetReport('int'), 60)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 1h00 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "2h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 120)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '19')
      self.assertEqual(model.GetConsoSMSMax(), '50')

      self.assertEqual(model.GetConsoHorsForfait(), "3,00 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 12/08/2010 au soir")
        
   def test_BouyguesNeo20hBonus20SMS_1(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesNeoBonus20SMS-1.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 13/08/2010 &agrave; 11h17")
      self.assertEqual(model.GetForfait(), 'Neo 20h')
      
      self.assertEqual(model.GetConsoVoix('str'), "00 min")
      self.assertEqual(model.GetConsoVoix('int'), 0)

      self.assertEqual(model.GetReport('int'), 60)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 1h00 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "2h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 120)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '50')

      self.assertEqual(model.GetConsoSMSSupp(), '1')
      self.assertEqual(model.GetConsoSMSSuppMax(), '20')
      
      self.assertEqual(model.GetConsoHorsForfait(), "0 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 12/09/2010 au soir")
        
   def test_BouyguesNeo20hBonus20SMS(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesNeoBonus20SMS.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 13/08/2010 &agrave; 10h23")
      self.assertEqual(model.GetForfait(), 'Neo 20h')
      
      self.assertEqual(model.GetConsoVoix('str'), "00 min")
      self.assertEqual(model.GetConsoVoix('int'), 0)

      self.assertEqual(model.GetReport('int'), 60)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 1h00 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "2h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 120)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '50')

      self.assertEqual(model.GetConsoSMSSupp(), '0')
      self.assertEqual(model.GetConsoSMSSuppMax(), '20')

      self.assertEqual(model.GetConsoHorsForfait(), "0 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 12/09/2010 au soir")

   def test_BouyguesErrorCode(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesErrorCode.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(ex.status, 'ERROR')
      self.assertEqual(ex.context, "Vous avez fait une erreur de saisie :\n\t\t\t\n\t\t\tLe code secret que vous venez de saisir n'est pas correct. Par s&eacute;curit&eacute;, apr&egrave;s 3 saisies erron&eacute;es, votre code secret sera bloqu&eacute;.")

   def test_BouyguesErrorTelephone(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesErrorTelephone.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(ex.status, 'ERROR')
      self.assertEqual(ex.context, "Nous sommes d&eacute;sol&eacute;s, mais nous n'avons pas reconnu votre num&eacute;ro de t&eacute;l&eacute;phone forfait Bouygues Telecom.\n\t\t\tMerci de le saisir &agrave; nouveau.")

 
   def test_BouyguesNeo3pasencore(self):
      ex = QonsoExtractorBouygues()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/BouyguesNeo3pasencore.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 20/08/2010 &agrave; 06h40")
      self.assertEqual(model.GetForfait(), 'Neo.3 illimité de 21h30 à 8h')
      
      self.assertEqual(model.GetConsoVoix('str'), "00 min")
      self.assertEqual(model.GetConsoVoix('int'), 0)

      self.assertEqual(model.GetReport('int'), 65)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 1h05 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "3h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 180)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 500)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 19/09/2010 au soir")
              
      